// ?:匹配不捕获 不铺货当前的分组
// + 至少一个
// ? 尽可能少匹配
// 源码里的模板编译 也是基于正则的
const defaultRE = /\{\{((?:.|\r?\n)+?)\}\}/g
export const util = {
  getValue(vm, expr) { // school.name
    let keys = expr.split('.')
    return keys.reduce((memo, current) => { // reduce 他具备迭代的功能
      memo = memo[current] // vm.school.name
      return memo
    }, vm)
  },
  compilerText(node, vm){ // 编译文本 替换{{ school.name }}
    node.textContent = node.textContent.replace(defaultRE, function(...args) {
      console.log('--compilerText-')
      console.log(vm, args)
      // return vm[]
      return util.getValue(vm, args[1])
    })
  }
}
// 重写
export function compiler(node, vm) { // node 就是文档碎片
  let childNodes = node.childNodes; // 只有一层 只有儿子 没有孙子
  // 将类数组转化成数组
  [...childNodes].forEach(child => {
    if(child.nodeType == 1) { // 1 元素  3 文本
      compiler(child, vm)
    }else if(child.nodeType == 3) {
      util.compilerText(child, vm)
    }
  })
}